<?php
namespace app\common\util;

class ImageHelper extends SingleObjectClass
{
    /**
     * 创建画布
     * @param $width - 画布宽度
     * @param $height - 画布高度
     * @return false|\GdImage|resource - 返回创建的画布资源
     */
    public static function createCanvas($width, $height)
    {
        $canvas = imageCreatetruecolor($width, $height); // 新建画布
        $color = imagecolorallocate($canvas, 255, 255, 255); // 背景白色
        imagefill($canvas, 0, 0, $color);
        return $canvas;
    }

    /**
     * 获取图片信息
     * @param $imageUrl - 图片的URL或路径
     * @param int $aimW - 目标宽度
     * @param int $aimH - 目标高度，如果有目标宽度，本参数则无效
     * @return array - 包含图片信息的关联数组
     */
    public static function getImageInfo($imageUrl, $aimW = 0, $aimH = 0)
    {
        // 解析图片后缀
        $arr = explode('.', $imageUrl);
        $suffix = end($arr);

        // 根据后缀创建图像资源
        if ($suffix == 'jpg' || $suffix == 'jpeg')
            $image = imagecreatefromjpeg($imageUrl);
        if ($suffix == 'png')
            $image = imagecreatefrompng($imageUrl);
        if ($suffix == 'gif')
            $image = imagecreatefromgif($imageUrl);

        return self::getImageInfoFromRawGdImage($image, $aimW, $aimH);   
    }

    public static function getImageInfoFromRawGdImage($image, $aimW = 0, $aimH = 0)
    {
        // 计算目标宽度和高度
        $aimWidth = $orgWidth = imagesx($image);
        $aimHeight = $orgHeight = imagesy($image);
        $percent1 = $orgHeight / $orgWidth; // 长宽比例

        // 如果目标高度大于0，则按高度调整图像尺寸
        if ($aimH > 0) {
            $aimWidth = intval($orgWidth / $orgHeight * $aimH); // 根据高度等比例计算宽度
            $aimHeight = $aimH; // 目标高度设置为指定的高度
        }

        // 如果目标宽度大于0，则按宽度调整图像尺寸
        if ($aimW > 0) {
            $aimWidth = $aimW; // 目标宽度设置为指定的宽度
            $aimHeight = intval($aimW / $orgWidth * $orgHeight); // 根据宽度等比例计算高度
        }

        // 构建结果数组
        $result = [
            'image' => $image,
            'orgWidth' => $orgWidth,
            'orgHeight' => $orgHeight,
            'width' => $aimWidth,
            'height' => $aimHeight,
            'percent' => $percent1
        ];

        return $result;
    }
}